import { FormatLanguage } from "./types";

export * from "./types";

/**
 * 格式化持续时间
 * @param durationSecs 持续时间（秒）
 * @param lang 语言（可选）
 * @returns 格式化后的持续时间字符串
 */
export function formatDuration(durationSecs: number, lang?: FormatLanguage): string {
    let sec = Math.round(durationSecs);
    let min = Math.floor(sec / 60);
    let hour = Math.floor(min / 60);

    sec %= 60;
    min %= 60;

    const secStr = sec.toString();
    const minStr = min.toString();
    const hourStr = hour.toString();

    if (lang === undefined) {
        // 如果未指定语言，则返回标准格式的持续时间字符串
        return `${hourStr}:${minStr.padStart(2, "0")}:${secStr.padStart(2, "0")}`;
    }

    switch (lang) {
        case FormatLanguage.Chinese:
            // 如果语言为中文
            if (hour > 0) {
                // 如果小时大于0，则返回"X时X分X秒"格式的持续时间字符串
                return `${hourStr}时${minStr}分${secStr}秒`;
            } else if (min > 0) {
                // 如果分钟大于0，则返回"X分X秒"格式的持续时间字符串
                return `${minStr}分${secStr}秒`;
            } else {
                // 如果分钟和秒都为0，则返回"X秒"格式的持续时间字符串
                return `${secStr}秒`;
            }
        case FormatLanguage.English:
            // 如果语言为英文
            if (hour > 0) {
                // 如果小时大于0，则返回"XhXmXs"格式的持续时间字符串
                return `${hourStr}h${minStr}m${secStr}s`;
            } else if (min > 0) {
                // 如果分钟大于0，则返回"XmXs"格式的持续时间字符串
                return `${minStr}m${secStr}s`;
            } else {
                // 如果分钟和秒都为0，则返回"Xs"格式的持续时间字符串
                return `${secStr}s`;
            }
    }
}
